iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
佛心分享-SideProject30

從0開始—初階程式語言學習者的必經之路系列 第 10

DAY10新增遊戲功能-for迴圈及其他語法

  • 分享至 

  • xImage
  •  

1.多人模式/回合限制/重新開始的功能增加
多人模式 + 回合限制 + 重新開始遊戲的實作範例

import java.util.Scanner;

public class Ch7_5_Multiplayer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean playAgain;

    do {
        // 設定玩家數量
        System.out.print("請輸入玩家數量: ");
        int numPlayers = sc.nextInt();
        
        // 設定回合數限制
        System.out.print("請輸入每位玩家的最大猜測次數: ");
        int maxAttempts = sc.nextInt();
        
        // 記錄每個玩家的猜測次數
        int[] attempts = new int[numPlayers];
        int[] guesses = new int[numPlayers];
        boolean isGuessed = false;
        int target = (int) (Math.random() * 100 + 1); // 產生1~100的隨機數字
        
        // 進行遊戲
        while (!isGuessed) {
            for (int i = 0; i < numPlayers; i++) {
                if (attempts[i] < maxAttempts) {
                    System.out.print("玩家" + (i + 1) + ",請輸入猜測值 => ");
                    guesses[i] = sc.nextInt();
                    attempts[i]++;
                    
                    if (guesses[i] == target) {
                        System.out.println("玩家" + (i + 1) + " 猜中數字: " + target + ",共用了 " + attempts[i] + " 次!");
                        isGuessed = true;
                        break;
                    } else if (guesses[i] > target) {
                        System.out.println("數字太大!");
                    } else {
                        System.out.println("數字太小!");
                    }
                } else {
                    System.out.println("玩家" + (i + 1) + " 已經用完了所有的猜測次數。");
                }
            }
            
            // 檢查是否所有玩家都已經用完了猜測次數
            boolean allPlayersOutOfAttempts = true;
            for (int i = 0; i < numPlayers; i++) {
                if (attempts[i] < maxAttempts) {
                    allPlayersOutOfAttempts = false;
                    break;
                }
            }
            
            if (allPlayersOutOfAttempts) {
                System.out.println("所有玩家都用完了猜測次數。遊戲結束,沒有人猜中目標數字。");
                break;
            }
        }
        
        // 允許重新開始遊戲
        System.out.print("是否要重新開始遊戲?(y/n): ");
        char response = sc.next().charAt(0);
        playAgain = (response == 'y' || response == 'Y');
        
    } while (playAgain);

    System.out.println("感謝遊玩!");
}

}

2.新增功能的說明

  1. 擴展到多個玩家:
    • 使用了一個 for 迴圈讓多個玩家輪流進行猜測,玩家數量可以根據輸入動態設定。
  2. 設置回合數限制:
    • 每位玩家有一個最大猜測次數 maxAttempts,當某位玩家達到這個次數時,他們將不能再進行猜測。
    • 程式碼中還加入了檢查所有玩家是否都用完猜測次數的邏輯,如果是,遊戲結束並顯示平局訊息。
  3. 允許重新開始遊戲:
    • 在一局遊戲結束後,詢問玩家是否要重新開始。如果玩家選擇 “y” 或 “Y”,則遊戲重新開始,否則結束遊戲。

這樣的改寫允許你靈活地設置玩家數量、控制每位玩家的猜測次數,並在遊戲結束後選擇是否重新開始遊戲,讓遊戲更具挑戰性和可玩性。

2.新增及重複練習的語法

  1. for 迴圈:

    • 功能: 迴圈用於多玩家模式下,每個玩家依次進行猜測。
    • 語法:

for (int i = 0; i < numPlayers; i++) {
// 每個玩家依次進行猜測
}

這個 for 迴圈依據玩家數量 numPlayers 來控制遊戲流程,讓每個玩家依次輸入猜測值。

  1. int[] 陣列:

    • 功能: 用來記錄每個玩家的猜測次數和猜測值。
    • 語法:

int[] attempts = new int[numPlayers];
int[] guesses = new int[numPlayers];

這裡使用了兩個陣列 attempts 和 guesses,分別用來記錄每個玩家的猜測次數和他們的猜測值。陣列的大小取決於 numPlayers,即玩家的數量。

  1. 條件判斷 (if-else 語句):

    • 功能: 用於檢查每位玩家的猜測是否正確,並決定是否結束遊戲。
    • 語法:

if (guesses[i] == target) {
System.out.println("玩家" + (i + 1) + " 猜中數字: " + target + ",共用了 " + attempts[i] + " 次!");
isGuessed = true;
break;
} else if (guesses[i] > target) {
System.out.println("數字太大!");
} else {
System.out.println("數字太小!");
}

當玩家的猜測值與目標數字匹配時,遊戲結束,並使用 break 語句跳出迴圈。

  1. break 語句:

    • 功能: 在玩家猜中數字或所有玩家都用完了猜測次數時,提前結束 for 或 while 迴圈。
    • 語法:

break;

在 if 判斷玩家猜中目標數字後,使用 break 語句結束迴圈並結束遊戲。

  1. 回合數限制判斷:

    • 功能: 檢查每位玩家的猜測次數是否達到設定的上限。
    • 語法:

if (attempts[i] < maxAttempts) {
// 玩家可以繼續猜測
} else {
System.out.println("玩家" + (i + 1) + " 已經用完了所有的猜測次數。");
}

判斷每位玩家的猜測次數是否已經達到 maxAttempts。如果是,該玩家將不能再進行猜測。

  1. 檢查所有玩家是否用完猜測次數:

    • 功能: 判斷是否所有玩家都已經用完了猜測次數,並在這種情況下結束遊戲。
    • 語法:

boolean allPlayersOutOfAttempts = true;
for (int i = 0; i < numPlayers; i++) {
if (attempts[i] < maxAttempts) {
allPlayersOutOfAttempts = false;
break;
}
}
if (allPlayersOutOfAttempts) {
System.out.println("所有玩家都用完了猜測次數。遊戲結束,沒有人猜中目標數字。");
break;
}

使用一個迴圈來檢查每位玩家是否都用完了猜測次數,如果所有玩家都用完了猜測次數,則遊戲結束並顯示平局訊息。

  1. 重新開始遊戲的選擇 (do-while 迴圈):

    • 功能: 允許玩家在遊戲結束後選擇是否重新開始遊戲。
    • 語法:

do {
// 遊戲邏輯
System.out.print("是否要重新開始遊戲?(y/n): ");
char response = sc.next().charAt(0);
playAgain = (response == 'y' || response == 'Y');
} while (playAgain);

使用 do-while 迴圈來控制遊戲流程。當玩家選擇 “y” 或 “Y” 時,遊戲會重新開始;選擇 “n” 則結束遊戲。
(創作想法部分參考生成式軟體ChatGPT)


上一篇
DAY9 一起玩才好玩~增加多人模式
下一篇
DAY11 闖關遊戲—如何使用OOP
系列文
從0開始—初階程式語言學習者的必經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言